<?php

namespace App\Providers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Pagination\Paginator;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
      error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
      Schema::defaultStringLength(191);
      Paginator::useBootstrap();


      DB::listen(
          function ($sql) {
              foreach ($sql->bindings as $i => $binding) {
                  if ($binding instanceof \DateTime) {
                      $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
                  } else {
                      if (is_string($binding)) {
                          $sql->bindings[$i] = "'$binding'";
                      }
                  }
              }

              // Insert bindings into query
              $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);

              $query = vsprintf($query, $sql->bindings);

              // Save the query to file
              $logFile = fopen(
                  storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'),
                  'a+'
              );
              fwrite($logFile, date('Y-m-d H:i:s') . ' [' . get_client_ip() .  ']: ' . $query . PHP_EOL);
              fclose($logFile);
          }
      );
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}
